\chapter{Architecture}

\section{Une vue d'ensemble}
Notre programme se caractérise par trois parties principales. La fenêtre de jeu, la structure du jeu et l'intelligence artificielle.
Le programme instancie d'abord une fenêtre de la librairie Swing. Le plateau de Jeu ainsi que l'IA sont des attributs de cette fenêtre et
seront instanciés lors de la création de la fenêtre.

\section{La fenêtre de Jeu}
La fenêtre de Jeu est organisée en 3 zones :

\begin{description}
\item [La zone de gauche] Elle regroupe les 2 champs permettant de configurer le programme, à savoir fixer la profondeur maximun de recherche et fixer le temps maximun pour faire cette recherche. Ces 2 options permettent de modifier le comportement de l'IA.
\item [La zone centrale] Elle représente le plateau de jeu. Elle est constituée d'une grille de boutons. C'est grâce à eux que nous déclenchons les tours de Jeu. A chaque clique sur un bouton, ce qui signifie que c'est l'humain qui joue, le programme fait jouer l'humain (modulo si le coup était possible), et ensuite fait jouer l'ordinateur. Notre programme oblige donc un affrontement humain contre ordinateur en obligeant le joueur humain à commencer. Nous aurions pu étendre notre application à des affrontements humain contre humain ou ordinateur contre ordinateur mais nous avons préféré produire une IA performante plutôt que de rajouter des fonctionnalités bonus à notre Jeu.
Afin de faciliter la réalisation de cette fenêtre, nous avons redéfini une classe bouton afin de pouvoir connaitre
l'emplacement du bouton sur la grille de Jeu et savoir où le joueur Humain veut jouer.
\item [La zone de droite] Elle affiche l'historique des actions effectuées. Elle permet également d'indiquer des messages à l'utilisateur. 
\end{description}

La capture d'écran suivante illustre ces 3 zones. (figure~\ref{ihm})
\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.7]{ihm.png}
\caption{La fenêtre de jeu.}
\label{ihm}
\end{center}
\end{figure}


\section{Le plateau de Jeu}
Nous parlons ici de la classe Plateau. La structure de données qui mémorise l'état du Jeu est une matrice de 8*8 Cases, attribut de la classe Plateau. Cette classe possède également des méthodes afin d'interroger l'état du Jeu (quel joueur a le plus de pions, quels coups sont possibles par exemple) et aussi d'appliquer les coups joués par l'humain ou par l'ordinateur. Nos cases possèdent un attribut de type Enumération qui peut prendre comme valeur BLANC, NOIR ou VIDE.

\section{L'intelligence artificielle}
L'intelligence artificielle est une classe qui sera instanciée une fois comme attribut de la fenêtre. Elle possède les méthodes \emph{Min}, \emph{Max}, \emph{Valeur} et \emph{FonctionEvaluation} sur le modèle de l'algorithme Alpha-Beta présenté en cours. Son fonctionnement vous sera expliqué dans une autre partie.

\begin{landscape}
\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.5]{classe.jpg}
\caption[Diagramme de classe]{Diagramme de classe simplifié présentant l'architecture du logiciel}
\label{diagClass}
\end{center}
\end{figure}
\end{landscape}
